<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1. 语法糖：两种方法可以实现同一种功能，简单，便捷，清晰那种写法，成为语法糖
        // 匿名函数
        // let eat=function(){
        //   console.log('吃火锅');
        // }

        // 箭头函数 （匿名函数）
        // let eat=()=>{
        //     console.log('吃烤鱼');
        // }
        // eat();

        // 2.构造函数 
        //   构造函数是一种特殊的函数，主要作用是初始化对象，即为对象动态的添加属性
        //  new  关键字  创建对象 
        function Star(age) {
            this.age = age
            this.sing = function () {
                console.log('我喜欢唱歌');
            }
        }
        let eason = new Star(22)
        eason.sing(); // 我喜欢唱歌
        console.log(eason);

        // 类， 是对象公共属性抽取，对象的魔板
        class Hero {
            constructor(age) {
                this.age = age
            }
            sing() {
                console.log('我来郑州开演唱会');
            }
        }
        let jay = new Hero(18);
        jay.sing();  // 我来郑州开演唱会

        /* 
        总结： 
           构造函数和类的作用都是将对象的属性和方法进行抽取
           构造函数和类都是用了创建对象的
           创建对象的语法一模一样

        类和构造函数是一码事，类是构造函数的语法糖
        
        */
    
        console.log(typeof Star);  // function
        console.log(typeof Hero);  // function
    </script>
</body>

</html>